<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
<!-- designer-custom-widgets.qdoc -->
  <title>为Qt Designer创建和使用组件 | Qt Designer 手册</title>
  <link rel="stylesheet" type="text/css" href="style/offline-simple.css" />
  <script type="text/javascript">
    document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css");
    // loading style sheet breaks anchors that were jumped to before
    // so force jumping to anchor again
    setTimeout(function() {
        var anchor = location.hash;
        // need to jump to different anchor first (e.g. none)
        location.hash = "#";
        setTimeout(function() {
            location.hash = anchor;
        }, 0);
    }, 0);
  </script>
</head>
<body>
<div class="header" id="qtdocheader">
  <div class="main">
    <div class="main-rounded">
      <div class="navigationbar">
        <table><tr>
<td ><a href="../qtdoc/index.html">Qt 5.14</a></td><td ><a href="qtdesigner-manual.html">Qt Designer 手册</a></td><td >为Qt Designer创建和使用组件</td></tr></table><table class="buildversion"><tr>
<td id="buildversion" width="100%" align="right"><a href="qtdesigner-manual.html">Qt 5.14.2 参考文档</a></td>
        </tr></table>
      </div>
    </div>
<div class="content">
<div class="line">
<div class="content mainContent">
<div class="sidebar">
<div class="toc">
<h3><a name="toc">Contents</a></h3>
<ul>
<li class="level1"><a href="#creating-custom-widget-plugins">创建自定义小部件插件</a></li>
<li class="level1"><a href="#retrieving-access-to-qt-designer-components">检索对 <i>Qt Designer</i> 组件的访问</a></li>
<li class="level1"><a href="#creating-user-interfaces-at-run-time">在运行时创建用户界面</a></li>
</ul>
</div>
<div class="sidebar-content" id="sidebar-content"></div></div>
<h1 class="title">为 Qt Designer 创建和使用组件</h1>
<span class="subtitle"></span>
<!-- $$$qtdesigner-components.html-description -->
<div class="descr"> <a name="details"></a>
<a name="creating-custom-widget-plugins"></a>
<h2 id="creating-custom-widget-plugins">创建自定义小部件插件</h2>
<p>在为 <i>Qt Designer</i> 实现自定义小部件插件时，您必须子类化 <a href="qdesignercustomwidgetinterface.html">QDesignerCustomWidgetInterface</a> ，以将您的自定义小部件公开给 <i>Qt Designer</i> 。
单个自定义小部件插件被构建为一个单独的库。
如果您想要在同一个库中包含几个自定义小部件插件，那么您必须添加子类 <a href="qdesignercustomwidgetcollectioninterface.html">QDesignerCustomWidgetCollectionInterface</a> 。</p>
<p>要在 <i>Qt Designer</i> 的工作空间中提供您的自定义小部件插件预期的行为和功能，您可以子类化相关的扩展类:</p>
<p><a href="qdesignercontainerextension.html">QDesignerContainerExtension</a> 类允许您向自定义多页面容器添加页面。<a href="qdesignertaskmenuextension.html">QDesignerTaskMenuExtension</a> 类允许您向 <i>Qt Designer</i> 的任务菜单中添加自定义菜单项。<a href="qdesignermembersheetextension.html">QDesignerMemberSheetExtension</a> 类允许您操作小部件的成员函数，当使用 <i>Qt Designer</i> 的模式来编辑信号和槽时，会显示这些成员函数。最后，<a href="qdesignerpropertysheetextension.html">QDesignerPropertySheetExtension</a> 类允许您操作小部件的属性，这些属性显示在 <i>Qt Designer</i> 的属性编辑器中 。</p>
<p class="centerAlign"><img src="images/qtdesignerextensions.png" alt="" /></p><p>在 <i>Qt Designer</i> 中，只有在需要扩展时才会创建它们。
因此，在实现扩展时，您还必须创建 <a href="qextensionfactory.html">QExtensionFactory</a> 的子类，即创建一个能够创建扩展实例的类。另外，你必须让 <i>Qt Designer</i> 的扩展管理器注册你的工厂;扩展管理器根据需要控制扩展的构造，您可以通过 <a href="qdesignerformeditorinterface.html">QDesignerFormEditorInterface</a> 和 <a href="qextensionmanager.html">QExtensionManager</a> 访问它 。</p>
<p>有关创建带有扩展名的自定义小部件插件的完整示例，请参见 <a href="qtdesigner-taskmenuextension-example.html">任务菜单扩展(Task Menu Extension)</a> 或 <a href="qtdesigner-containerextension-example.html">容器扩展(Container Extension)</a> 示例 。</p>
<a name="retrieving-access-to-qt-designer-components"></a>
<h2 id="retrieving-access-to-qt-designer-components">检索对 <i>Qt Designer</i> 组件的访问</h2>
<p>本节中提到的类的目的是提供对 <i>Qt Designer</i> 的组件、管理器和工作区的访问，它们不打算直接实例化 。</p>
<p><i>Qt Designer</i> 由几个组件组成。它有一个动作编辑器、一个属性编辑器、widget box 和对象检查器，您可以在其工作空间中查看它们 。</p>
<p class="centerAlign"><img src="images/qtdesignerscreenshot.png" alt="" /></p><p><i>Qt Designer</i> 也有一个对象，工作在后台;它包含了将 <i>Qt Designer</i> 的所有组件集成到一个一致的应用程序中的逻辑。你可以使用 <a href="qdesignerformeditorinterface.html">QDesignerFormEditorInterface</a> 访问这个对象，以检索 <i>Qt Designer</i> 组件的接口:</p>
<ul>
<li><a href="qdesigneractioneditorinterface.html">QDesignerActionEditorInterface</a></li>
<li><a href="qdesignerobjectinspectorinterface.html">QDesignerObjectInspectorInterface</a></li>
<li><a href="qdesignerpropertyeditorinterface.html">QDesignerPropertyEditorInterface</a></li>
<li><a href="qdesignerwidgetboxinterface.html">QDesignerWidgetBoxInterface</a></li>
</ul>
<p>另外，您可以使用 <a href="qdesignerformeditorinterface.html">QDesignerFormEditorInterface</a> 来检索 <i>Qt Designer</i> 的扩展管理器( <a href="qextensionmanager.html">QExtensionManager</a> )和窗体窗口管理器( <a href="qdesignerformwindowmanagerinterface.html">QDesignerFormWindowManagerInterface</a> )的接口。扩展管理器控制所需扩展的构造，而窗体窗口管理器控制 <i>Qt Designer</i> 的工作空间中出现的窗体窗口 。</p>
<p>一旦你有一个 <i>Qt Designer</i> 的窗体窗口管理器( <a href="qdesignerformwindowmanagerinterface.html">QDesignerFormWindowManagerInterface</a> ) 接口 ,您还可以访问所有目前出现在 <i>Qt Designer</i> 工作空间的窗体窗口:<a href="qdesignerformwindowinterface.html">QDesignerFormWindowInterface</a> 类允许您查询和操作窗体窗口,它提供了一个窗体窗口的的光标接口。<a href="qdesignerformwindowcursorinterface.html">QDesignerFormWindowCursorInterface</a> 类允许您查询和修改给定窗体窗口的小部件选择，此外还可以修改所有窗体小部件的属性 。</p>
<a name="creating-user-interfaces-at-run-time"></a>
<h2 id="creating-user-interfaces-at-run-time">在运行时创建用户界面</h2>
<p><code>QtDesigner</code> 模块包含 <a href="qformbuilder.html">QFormBuilder</a> 类，该类提供了一种机制，可以基于 <i>Qt Designer</i> 创建的UI文件在运行时动态创建用户界面。该类通常由嵌入 <i>Qt Designer</i> 的自定义组件和应用程序使用。需要在运行时动态生成用户界面的独立应用程序使用在 <a href="../qtuitools/quiloader.html">QUiLoader</a> 模块中找到的 <a href="../qtuitools/qtuitools-module.html">QtUiTools</a> 类 。</p>
<p>有关使用 <a href="../qtuitools/quiloader.html">QUiLoader</a> 的完整示例，请参见 <a href="qtdesigner-calculatorbuilder-example.html">计算器生成器示例(Calculator Builder example)</a> 。</p>
<!-- @@@qtdesigner-components.html -->
        </div>
       </div>
   </div>
   </div>
</div>
<div class="footer">
   <p>
   <acronym title="Copyright">&copy;</acronym> 2020 The Qt Company Ltd.
   Documentation contributions included herein are the copyrights of
   their respective owners.<br/>    The documentation provided herein is licensed under the terms of the    <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation    License version 1.3</a> as published by the Free Software Foundation.<br/>    Qt and respective logos are trademarks of The Qt Company Ltd.     in Finland and/or other countries worldwide. All other trademarks are property
   of their respective owners. </p>
</div>
</body>
</html>
